// 给定一个经过编码的字符串s，要求返回s经过解码之后的字符串
// 编码规则：k[encoded_string],encoded_string为字符串，k为整数，表示encoded_string重复k次
// 思路，堆栈
// 用两个栈，分别存储左中括号前面的字符串和重复次数，最终为了在遇到右中括号的时候，出栈得到重复次数，把当前字符串重复处理并加上出栈的字符串，继续下一轮处理
function decodeString(s) {
    let stack1 = [] // 该栈存储`[`前面的字符串str
    let stack2 = [] // 该栈存储`[`前面的数字num，用来重复处理`[]`中的字符串
    let res = '' // 存储待解码（重复处理）的字符串
    let num = 0 // 记录当前数字
    for (let i = 0; i < s.length; i++) {
        if (s[i] === '[') {
            stack1.push(res)
            stack2.push(num)
            res = ''
            num = 0
        } else if (s[i] === ']') {
            let preStr = stack1.pop()
            let preNum = stack2.pop()
            res = preStr + res.repeat(preNum)
        } else if (s[i] >= 0 && s[i] <= 9) {
            num = num * 10 + Number(s[i])
        } else {
            res += s[i]
        }
    }
    return res
}

let s = "3[a2[c]]"
console.log(decodeString(s))